package helper
//
//import (
//"fmt"
//"github.com/jinzhu/gorm"
//"github.com/rs/zerolog/logs"
//	"github.com/spf13/pflag"
//	"github.com/spf13/viper"
//	"os"
//	"path/filepath"
//	"sync"
//"time"
//	"webGoDemo/conf"
//)
//
//var once sync.Once
//var globalHelperRepository *Repository
//var globalDB *gorm.DB
//
//func Defer() {
//	if globalDB != nil {
//		globalDB.Close()
//	}
//
//}
//func GetGlobalHelperRepository() *Repository {
//	once.Do(func() {
//		filePath, _ := getConfigFile()
//		config, _ := Load(filePath)
//		mysqlArgs := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
//			config.Mysql.User, config.Mysql.Password, config.Mysql.Host, config.Mysql.Port, config.Mysql.Database)
//		db, err := gorm.Open("mysql", mysqlArgs)
//		if err != nil {
//			panic("gorm open mysql failed")
//			return
//		}
//		sqlDB := db.DB()
//		sqlDB.SetMaxIdleConns(10)  //空闲连接数
//		sqlDB.SetMaxOpenConns(100) //最大连接数
//		sqlDB.SetConnMaxLifetime(time.Minute)
//		db.LogMode(true)
//
//		globalHelperRepository = newRepository(db)
//	})
//
//	return globalHelperRepository
//}
//
///*
//	topicRepo := topic2.NewTopicRepo(db)
//	clusterRepo := cluster2.NewClusterRepo(db)
//	summaryRepo := summary.NewSummaryRepo(db)
//	groupRepo := group.NewGroupRepo(db)
//*/
//type Repository struct {
//	topicRepo   topic2.Repository
//	clusterRepo cluster2.Repository
//	summaryRepo summary2.Repository
//	groupRepo   group2.Repository
//	proxyRepo   proxy2.Repository
//}
//
//func NewRepository(db *gorm.DB) *Repository {
//	return GetGlobalHelperRepository()
//}
//
//func newRepository(db *gorm.DB) *Repository {
//	hr := new(Repository)
//	hr.topicRepo = topic2.NewTopicRepo(db)
//	hr.clusterRepo = cluster2.NewClusterRepo(db)
//	hr.summaryRepo = summary2.NewSummaryRepo(db)
//	hr.groupRepo = group2.NewGroupRepo(db)
//	hr.proxyRepo = proxy2.NewProxyRepo(db)
//	return hr
//}
//
//func (s Repository) GetTopicRepository() topic2.Repository {
//	return s.topicRepo
//}
//
//func (s Repository) GetClusterRepository() cluster2.Repository {
//	return s.clusterRepo
//}
//
//func (s Repository) GetProxyRepository() proxy2.Repository {
//	return s.proxyRepo
//}
//
//func (s Repository) GetSummaryRepository() summary2.Repository {
//	return s.summaryRepo
//}
//
//func (s Repository) GetGroupRepository() group2.Repository {
//	return s.groupRepo
//}
//
//func getConfigFile() (string, error) {
//	defaultConfigFile, err := os.Getwd()
//	if err != nil {
//		return "", err
//	}
//	var configFileName string
//	pflag.StringVar(&configFileName,
//		"conf",
//		filepath.Join(defaultConfigFile, "/conf/application.yaml"),
//		"explicitly defines the path, name and extension of the config file")
//	pflag.Parse()
//	return configFileName, nil
//}
//
//func Load(fileName string) (*conf.Conf, error) {
//	// from file
//	viper.SetConfigFile(fileName)
//	err := viper.ReadInConfig()
//	if err != nil {
//		logs.Warn().Err(err).Msg("viper read in config failed, use env or default")
//		return nil, err
//	}
//	logs.Info().Interface("setting", viper.AllSettings()).Msg("all viper setting")
//	// unmarshal
//	config := new(conf.Conf)
//	err = viper.Unmarshal(&config)
//	if err != nil {
//		return nil, err
//	}
//	logs.Info().Interface("config", config).Msg("config before parse")
//
//	return config, nil
//}